用一句話來說明什麼是 Webhook:「Webhook 是讓一個網站能訂閱另一個網站的方法。」為了確保我們對訂閱的理解是一致的,接下來會講什麼是訂閱。
訂閱是當某些事情發生的時候,通知者會告訴訂閱者這件事發生了。既然訂閱了,就表示收到事件後訂閱者應該會採取某些行動。
訂閱階段:
通知階段:
下面會用生活中的例子來說明什麼是訂閱。
設定鬧鐘是一種訂閱行為。為什麼你會需要一個鬧鐘呢?因為你可能早上 9 點有事,希望能在早上 8 點起床。以這個例子來說:
當然你也許會希望通知者是你的妹妹,可是你不一定有妹妹。
點餐是一種訂閱行為。首先你到櫃檯跟 NPC 點餐,點完餐之後你可能會取得一個會震動的小物,或者一根旗子,或一張紙,或者什麼都沒有,總之你會待在位置上等,直到 NPC 送餐給你,或者小物開始發出光芒並且震動,然後你帶著震動小物去找 NPC 取餐。
你的主管交代你作事可能隱含著一種訂閱行為。首先你的主管找到你,然後跟你說:「這件事就交給你負責了。」你:「好哦~好哦~」
訂閱「只要有心,人人都可以做卡米狗」系列文是一種訂閱行為。首先你會到「只要有心,人人都可以做卡米狗」系列文按下「訂閱系列文」。訂閱之後,當我發新文章時,你會在 iT 邦幫忙的網頁右上角收到一個通知。(可是如果你不會時常開著 iT 邦幫忙的網頁,又為什麼要訂閱呢?_?)
按讚卡米狗 FB 粉絲團是一種訂閱行為。首先你會到卡米狗 FB 粉絲團按下「讚」。當我在粉絲團發表貼文時,你會在 FB 網頁右上角收到一個通知。
如果你不會時常開著 iT 邦幫忙的網頁,那麼就應該訂閱一下卡米狗 FB 粉絲團。
你可能會問:「我為什麼要訂閱?」
對呀,為什麼要訂閱呢?
使用訂閱可以使你不需要去檢查事件到底發生了沒,而且可以讓你在事件發生的瞬間就立即採取行動。
你會睡得不安穩,或者睡過頭。你必須不斷的起床看時鐘(注意,時鐘跟鬧鐘不同),以確保你沒有睡過頭。
你會比較爽,但是如果你的主管有看這篇文的話,他會知道你在摸魚。訂閱是一種很吃信用的機制,當通知者經常沒有盡通知責任時,訂閱功能就完全失效了,訂閱失效後就要回歸到原始的方法:單向溝通。
假設你去早餐店點個早餐內用桌號3,在你手機滑了兩小時後,發現早餐還沒送來,於是你去問早餐店老闆:「阿我的早餐有做嗎?」老闆回:「有啦~有啦~正在做。」其實根本就忘記做,而且也差不多該吃午餐了。但如果在你手機滑十分鐘時就去跟老闆確認,也許你可以早一點拿到。
假設你是主管,你應該要跟你的員工說事情做好時跟你說一聲,明確表達你想要訂閱你員工,以確保你可以在你員工事情做完時就安排下一件事情。為了確保當通知者不盡通知責任時,你還是可以榨乾他,你要追問一個逾期時間,在時間內沒做完你就會去找他,也就是說交代工作時應該要說兩件事:「你預計什麼時候會做完」「做完的時候叫我」,如果你發現你的員工都沒有主動來找你,而是你去找他,他才跟你說「喔!我剛做好呢!」「喔!我做完忘記跟你講」那肯定就是他在摸魚。
所以不管做什麼事,還是要主動一點才好。
講到這裡,人與人之間的溝通方法,我想大家應該都完全理解。至於網站跟網站之間的溝通方法有很多種,Webhook 使用的是 HTTP 協定。
電腦跟電腦在網路上傳遞訊息的方法其實跟郵局送掛號很像。你會作出一張明信片寄出(HTTP Request),明信片會在網路上傳遞,每個經手的郵局、郵差都能看見你寫的內容,收件人必須在收到每個明信片時進行簽收,還要立馬寄一封回信(HTTP Response),最後寄件人會收到回信,就算完成一次交流。
從這張圖來看我們可以知道,你是主動方,網站是被動方。只要你不戳他,他就不會回。一個基本的網站就是這樣,只要你不做任何操作,網頁上的東西就不會變。你可能需要不斷地按下重新整理,確保你看見的畫面是最新的,舉個例:這篇文章的瀏覽量不會主動更新。
這樣的溝通方式是不安全的,只要任何一個經手的郵局、郵差是壞人,就可以偽造信件內容。有一種詐騙手法是詐騙集團會寄假的繳費單給你,如果你以為繳費單是真的,你就會去便利商店繳費。在網路上也有類似的詐騙手法。那麼要怎樣才能確保安全(Secure)呢?答案就是使用安全(Secure)的 HTTP 協定。
HTTPS 協定就是安全的 HTTP 協定,跟 HTTP 協定有 87% 像,不同的是它傳遞的不是明信片而是密信片,經手的郵局、郵差無法看懂內容。而且寄件者的簽名有經過認證,可以確認寄件人身分,不用擔心收到造假的信。
今天就講到這裡,明天會講 Line Webhook 實際的運作流程。